\section{Mozilla Firefox}
\label{sec:mozilla_firefox}
Der Mozilla Firefox ist ein freier und quelloffener Webbrowser des Unternehmens Mozilla Corporation. Er entstand 2002 als Alternative zum Internet Explorer, der lange als alleiniger Marktführer galt. Der Firefox Browser unterstützt die Betriebssysteme Windows, Mac OS X und Linux.

\subsection{Architektur}
\label{subsec:firefox_architektur}
Wie andere Produkte aus der Mozilla Application Suite basiert das grafische User Interface des Firefox Browsers auf der durch Mozilla entwickelten Beschreibungssprache \acrshort{xul} (\acrlong{xul}). Die Sprache \acrshort{xul} ist plattformübergreifend und definiert nur die Struktur des User Interfaces. Mit \acrshort{css}"=Stylesheets kann das Layout und das Aussehen von \acrshort{xul} User Interfaces bestimmt und angepasst werden. Mit JavaScript kann das Verhalten und die Funktionen einzelner \acrshort{xul}"=Elemente definiert werden. 

Der Firefox Browser verwendet die ">Gecko"< \gls{layout_engine} zum Rendern von Webcontent und des eigenen User Interfaces. Zum Interpretieren und Kompilieren von JavaScript wird die von Mozilla entwickelte \gls{javascript_engine} ">SpiderMonkey"< verwendet.

\subsection{Erweiterungsmöglichkeiten}
\label{subsec:firefox_erweiterungsmoeglichkeiten}
Die offene und abstrakte Architektur des Firefox Browsers erlaubt eine Vielzahl an Anpassungsmöglichkeiten am Aussehen und dem Funktionsumfang des Browsers. Seit der Version 4.0 des Firefox Browser werden zwei Arten von Erweiterungen unterstützt, die nachfolgend genauer erläutert werden:

\subsubsection{Traditionelle Erweiterungen}
\label{subsec:firefox_traditionelle_erweiterungen}
Traditionelle Erweiterungen basieren auf dem gleichen Architektur-Konzept wie das User Interface des Firefox Browsers. Somit können Erweiterungen mittels \acrshort{xul}, JavaScript und \acrshort{css} entwickelt werden. Mit \acrshort{xul}"=Overlays lassen sich Elemente wie Buttons oder Kontextmenüs zur Benutzerschnittstelle hinzufügen, entfernen oder überschreiben. Mittels JavaScript kann auf \acrshort{xpcom}\footnote{\acrshort{xpcom} ist ein plattformübergreifendes Komponente mit mehrfach Sprachbindungen für C++, Java, Python und JavaScript.}"=Komponenten (\acrlong{xpcom}) zugegriffen werden und browserspezifische Funktionen abgefragt und ausgeführt werden.

Traditionelle Firefox Erweiterung setzten sich hauptsächlich aus einer oder mehreren der nachfolgenden Komponenten zusammen:

\begin{itemize}
  \item{\textbf{\textit{Install Manifest:}} Die Install Manifest"=Datei \verb|install.rdf| ist eine Datei im RDF/\acrshort{xml}"=Format und beinhaltet grundlegende Angaben über die Erweiterung, wie eine eindeutige Id, unterstützte Firefox Versionen und Meta"=Informationen über die Erweiterung. Jede Firefox Erweiterung benötigt eine Install Manifest"=Datei.}
  \item{\textbf{\textit{Chrome Registrierung:}} Die Datei \verb|chrome.manifest| wird für die Registrierung von Content wie \acrshort{xul} Dokumenten, \acrshort{css}"=Stylesheets und Lokalisierungs-Ressourcen im Firefox verwendet.}
  \item{\textbf{\textit{Content:}} Das Content Verzeichnis enthält \acrshort{xul}"= und JavaScript"= und \acrshort{css}"=Dateien die für die Erweiterung benötigt werden.}
\end{itemize}

\subsubsection{Add-on SDK Erweiterungen}
\label{subsec:add_on_sdk_erweiterungen}
Mit dem Add-on \acrshort{sdk} (\acrlong{sdk}) und dem Add-on Builder von Mozilla lassen sich sogenannte ">restartless"< bzw. ">bootstrapped"< Erweiterung entwickeln. Sie haben den Vorteil, dass sie keinen Browser-Neustart nach der Installation, wie bei traditionellen Erweiterungen erfordern. Dafür sind sie limitierter was den Zugriff auf browserspezifische Funktionen anbelangt. Das Add-on \acrshort{sdk} ist aus dem Mozilla Projekt ">Jetpack"< entstanden. Mit dem Ziel, Firefox Erweiterung möglichst einfach und schnell wie bei anderen Browsern zu entwickeln. Add-on \acrshort{sdk}"=basierte Erweiterungen werden mit \acrshort{html}, \acrshort{css} und JavaScript entwickelt.

Add-on \acrshort{sdk} Erweiterungen setzten sich hauptsächlich aus einer oder mehreren der nachfolgenden Komponenten zusammen:

\begin{itemize}
  \item{\textbf{\textit{Install Manifest:}} Die Install Manifest-Datei \verb|install.rdf| von Add-on \acrshort{sdk} Erweiterungen enthält grundsätzlich die gleichen Angaben wie bei traditionellen Erweiterung. Es wird jedoch zusätzlich vermerkt, dass die Erweiterung eine Bootstrap-Datei enthält.}
  \item{\textbf{\textit{Bootstrap Datei:}} Die Bootstrap"=Datei \verb|bootstrap.js| ist eine gewöhnliche JavaScript"=Datei, die bei der Installation und Deinstallation sowie beim Starten und Beenden des Firefox Browsers ausgeführt wird um Erweiterung ohne Browser-Neustart zu initialisieren.}
  \item{\textbf{\textit{api-utils:}} Das Verzeichnis \verb|api-utils| enthält die gesamte JavaScript \acrshort{api} die für Add-on \acrshort{sdk} Erweiterungen benötigt werden.}
  \item{\textbf{\textit{Add-on Scripts:}} Add-on Scripts sind JavaScript Dateien oder Libraries die im Kontext des Erweiterungsprozess ausgeführt werden. Sie haben vollen Zugriff auf die \verb|api-utils|.}
  \item{\textbf{\textit{Content Scripts:}} Content Scripts sind JavaScript"=Dateien die im Kontext der aktuell geladenen Webseite ausgeführt werden. Sie haben vollen Zugriff auf das \gls{_dom} der geladenen Webseite und können dieses beliebig manipulieren. Content Scripts können indirekt über das Content Modul der api-utils Library mit Add-on Scripts kommunizieren.}
\end{itemize}

\subsection{Vor- und Nachteile}
\label{subsec:firefox_vor-und_nachteile}
Der Firefox Browser bietet im Vergleich zu anderen Browser die umfangreichsten Erweiterungsmöglichkeiten an. Mit der \acrshort{xul}"=Beschreibungssprache lässt sich das Aussehen des Firefox Browsers beliebig erweitern oder manipulieren. Neben der Low-Level \acrshort{api} traditioneller Erweiterungen, die hauptsächlich auf \acrshort{xpcom} Komponenten basiert, bietet das Add-on \acrshort{sdk} eine High-Level \acrshort{api} an, mit der sich Firefox Erweiterung einfacher und effizienter entwickeln lassen. Die High-Level \acrshort{api} erfordert keine \acrshort{xul}"=Kenntnisse und basiert auf den allgemein bekannten Webstandards \acrshort{html}, \acrshort{css} und JavaScript.

Trotz der grossen Verbreitung und Akzeptanz von Firefox Erweiterungen gibt es Schwachstellen am Erweiterungskonzept im Vergleich zu anderen Browsern.
Der Initialaufwand für ein Entwickler sich in das Erweiterungskonzept des Firefox Browsers einzuarbeiten ist massiv grösser als z.B. bei Chrome Erweiterungen. Das Erweiterungskonzept basiert zwar auf verbreiteten und offenen Webstandards, durch die Vielfalt an Möglichkeiten ist die Implementation jedoch sehr proprietär. Die \acrshort{api} für traditionelle Erweiterung ist sehr Umfangreich, folglich bietet Mozilla auch eine sehr umfangreiche Dokumentation der \acrshort{api} an. Leider ist es schwierig sich in der Dokumentation zurecht zu finden, da viele \acrshort{api}-Methoden, Tutorials und Beispiele für aktuelle Firefox Versionen veraltet sind.

Das Add-on \acrshort{sdk} ist grundsätzlich eine gelungene Alternative, um Firefox Erweiterungen einfacher und effizienter zu entwickeln. Die JavaScript \acrshort{api} der Add-on \acrshort{sdk} ist jedoch nicht fester Bestandteil des Firefox Browser und wird bei jeder Erweiterung inkludiert.

Da Firefox Erweiterungen auf der Ebene der Gecko \gls{layout_engine} ausgeführt werden, sind die Möglichkeiten Erweiterungen zu debuggen massiv eingeschränkt.

